<?php

// Die Logger Klasse includen
include 'classes/logger/Logger.php';
include 'includes/constants.php';
include 'includes/functions.php';
include 'includes/variables.php';

// Hier wird der Error-Level extrem sensibel eingestellt (dev)
if (DEBUG_ENABLED) {
	error_reporting(E_ALL);
	ini_set('display_errors', 1);
}

// Die SessionID soll über cookies gesendet werden
ini_set('session.use_only_cookies', 1);

// Einen Zeoger auf den Logger definieren
$logger = Logger::getInstance();

// Autoloadfunktion registrieren
spl_autoload_register('autoload');

{ // Doctrine autoloader registrieren
	require 'classes/Doctrine/ORM/Tools/Setup.php';
	$lib = ROOT_FOLDER. "classes/";
	Doctrine\ORM\Tools\Setup::registerAutoloadDirectory($lib);
}
// Top Level Exception handler
set_exception_handler('uncaught_exception_handler');

// Die Session starten
session_start();

//Sprache und languagepack laden
if(isset($_SESSION['language']) and is_string($_SESSION['language']) and file_exists('languagepack/'.$_SESSION['language'].'.php')) {
	// Languagepack laden
	include 'languagepack/'.$_SESSION['language'].'.php';
} else {
	// Default languagepack laden
	include 'languagepack/de_DE.php';
}

// In diesem Array werden alle zulässigen Sektionen abgelegt
$section = array();
$section['admin']		= 'admin/admin.php';
$section['contact']		= 'core/contact.php';
$section['game']		= 'game/game.php';
$section['impressum']	= 'core/impressum.php';
$section['login'] 		= 'user/login.php';
$section['logout']		= 'user/logout.php';
$section['news']		= 'news/news.php';
$section['profile']		= 'user/profile.php';
$section['register'] 	= 'user/register.php';
$section['startpage']	= 'core/startpage.php';

// Rückgabewert vorbereiten
$ret = new Ret();

// ++++++++++++++++++++++++++  Sektion ausführen  +++++++++++++++++++++++++++++++++++++++++++++

// Prüfen, welche Sektion geöffnet werden soll
if (isset($_GET['section'])) {
	
	if (!isset($section[$_GET['section']])) {
		
		$ret = new Ret(SECTION_DOES_NOT_EXSIST . ': '. $_GET['section']);

		// warn
		$logger->logFile('The section '. $_GET['section'] .' does not exsist.', LEVEL_WARN);
		
	} else if (file_exists('includes/'.$section[$_GET['section']])) {
		
		// die gewünschte sektion ausführen
		$ret = include 'includes/'.$section[$_GET['section']];
		
	} else {
		
		$ret = new Ret(INCLUDE_NOT_FOUND_EXCEPTION . ': includes/'.$section[$_GET['section']]);

		// error
		$logger->logFile("The include file '". 'includes/'.$section[$_GET['section']] ."' was not found.", LEVEL_ERROR);
	
	}
	
} 

if (!$ret->get_template()) {
	
	if (file_exists('includes/'.$section['startpage'])) {
		
		// Defaultinhalt nicht eingeloggt
		$ret = include 'includes/' . $section['startpage'];
		
	} else {
		
		$ret = new Ret(INCLUDE_NOT_FOUND_EXCEPTION . ': includes/'.$section['startpage']);
		// error
		$logger->logFile("The include file '". 'includes/'.$section['startpage'] ."' was not found.", LEVEL_ERROR);
	
	}
	
}

// headarea vorbereiten
$headarea_ret = include 'includes/core/headarea.php';


// ++++++++++++++++++++  HTML Header  ++++++++++++++++++++++++++++++++++++++++

// Anfang des Headers einbinden
include 'html/pre_header.html';

// Prüfen, ob eine bestimmte css eingebunden werden soll
if (is_array($stylesheets = HolderFactory::getInstance('Stylesheet')->get_stylesheets())) {
	foreach ($stylesheets as $stylesheet)
		echo '<link rel="stylesheet" type="text/css" href="css/'.$stylesheet.'">';
}

// Prüfen, ob ein oder mehrere Javascripts eingebunden werden sollen
if (is_array($javascripts = HolderFactory::getInstance('Javascript')->get_javascripts())) {
	echo '<script type="text/javascript" >';
		foreach ($javascripts as $javascript) {
			include 'javascript/'.$javascript; 
		}
	echo '</script>';
}

// Prüfen, ob jQuery snippets gesetzt wurden
if (is_array($jquery_snippets = HolderFactory::getInstance('JQuerySnippet')->get_snippets())) {
	include 'html/jquery_doc_ready.html';
}

// Der Rest des Headers
include 'html/post_header.html';

// Beginn des Seitenweiten div elementes
echo '<div id="page" class="page_div">';

// +++++++++++++++++++++++++++  Body headarea  ++++++++++++++++++++++++++++++++++++++++
// Headbereich in einen headarea div einbetten
echo '<div id="headarea" class="headarea_div">';

// Daten für die headarea auslesen
$headarea_data = $headarea_ret->get_data();
$headarea_template = $headarea_ret->get_template();
unset($headarea_ret);

// Den Header einbinden
include 'templates/core/headarea.tpl';

// Die headarea daten werden nicht mehr benötigt
unset($headarea_data);

// Header-div ende
echo '</div>';

// +++++++++++++++++++++++++++  Body Content  ++++++++++++++++++++++++++++++++++++++++
// Hier beginnt das content div
echo '<div id="content" class="content_div">';

// Prüfen, ob ein Template gefordert wurde
if ($template = $ret->get_template()) {
	
	// Die Daten aus dem Ret-Objekt auslesen
	$data = $ret->get_data();
	// Ab hier wird das Ret-Objekt nicht mehr benötigt, also freigeben
	unset($ret);
	
	// Prüfen, ob es das Template gibt und ggf. einbinden
	$tFile = 'templates/'.$template;
	if (file_exists($tFile))
		// Das Template einbinden
		include $tFile;
		
	// Die Daten werden nicht mehr benötigt
	unset($data);
	
}

// Hier endet das content div
echo '</div>';

// Wenn ein Fehler aufgetreten ist,dann muss das error div erzeugt werden
if ($errors = HolderFactory::getInstance('Error')->get_errors()) {
	include 'html/error.html';
} 

// wenn eine info geschrieben wurde, dann muss das info div gezeichnet werden
if ($infos = HolderFactory::getInstance('Info')->get_infos()) {
	include 'html/info.html';
}

// ++++++++++++++++++++++++++++  Body Footer  +++++++++++++++++++++++++++++++++++++
// HTML Footer einbinden
include 'html/footer.html';

// Ende des Seitenweiten div
echo '</div>';
?>